home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre1.z / postgre1 / test / postfs.usr.bin / mkdir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  1.7 KB  |  98 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6.  
  7. #ifndef lint
  8. char copyright[] =
  9. "@(#) Copyright (c) 1983 Regents of the University of California.\n\
  10.  All rights reserved.\n";
  11. #endif not lint
  12.  
  13. #ifndef lint
  14. static    char sccsid[] = "@(#)mkdir.c 1.1 90/03/23 SMI"; /* from UCB 5.1 4/30/85 */
  15. #endif not lint
  16.  
  17. /*
  18.  * make directory
  19.  */
  20. #include <stdio.h>
  21. #include <sys/errno.h>
  22. #include "tmp/libpq-fs.h"
  23.  
  24. int mkdir();
  25. int mkdirp();
  26. extern char *getenv();
  27.  
  28. main(argc, argv)
  29.     char *argv[];
  30. {
  31.     int errors = 0;
  32.     int pflag = 0;
  33.     char *cmd = argv[0];
  34.     char *dbname;
  35.  
  36.     if ((dbname = getenv("DATABASE")) == (char *) NULL) {
  37.         fprintf(stderr, "no database specified in env var DATABASE\n");
  38.         fflush(stderr);
  39.         exit (1);
  40.     }
  41.  
  42.     PQsetdb(dbname);
  43.  
  44.     argc--, argv++;
  45.     while (argc > 0 && **argv == '-') {
  46.         (*argv)++;
  47.         while (**argv) switch (*(*argv)++) {
  48.  
  49.         case 'p':
  50.             pflag++;
  51.             break;
  52.  
  53.         default:
  54.             errors++;
  55.         }
  56.         argc--; argv++;
  57.     }
  58.     if (argc < 1 || errors) {
  59.         fprintf(stderr, "usage: %s [ -p ]  directory ...\n", cmd);
  60.         PQfinish();
  61.         exit(1);
  62.     }
  63.     while (argc--)
  64.         if ((pflag ? mkdirp : p_mkdir)(*argv++, 0777) < 0) {
  65.             fprintf(stderr, "pmkdir: ");
  66.             perror(*(argv-1));
  67.             errors++;
  68.         }
  69.     PQfinish();
  70.     exit(errors != 0);
  71.     /* NOTREACHED */
  72. }
  73.  
  74. int
  75. mkdirp(dir, mode)
  76.     char *dir;
  77.     int mode;
  78. {
  79.     int err;
  80.     char *slash;
  81.     char *rindex();
  82.     extern int errno;
  83.  
  84.     if (p_mkdir(dir, mode) == 0)
  85.         return (0);
  86. /*    if (errno != ENOENT)
  87.         return (-1); */
  88.     slash = rindex(dir, '/');
  89.     if (slash == NULL)
  90.         return (-1);
  91.     *slash = '\0';
  92.     err = mkdirp(dir, 0777);
  93.     *slash++ = '/';
  94.     if (err || !*slash)
  95.         return (err);
  96.     return p_mkdir(dir, mode);
  97. }
  98.